/**
 * @description 工具函数
 */

const { format } = require('date-fns')
const os = require('os')
const _ = require('lodash')

const isWindows = os.type().toLowerCase().indexOf('windows') >= 0

/**
 * 字符串 '1,2' 转换为数组 [1, 2]
 * @param {string} ids 格式如 '1' 或 '1,2,3'
 */
function parseNumberArr(ids = '') {
  const arr = ids
    .split(',')
    .filter(i => i.length > 0)
    .map(i => parseInt(i, 10))
  return arr
}

/**
 * 格式化时间 yyyy-MM-dd HH:mm:ss 会将世界标准时间格式化成北京时间；世界标准时区和我们相差8个小时
 * @param {Date} d 时间
 */
function formatDate(d) {
  return format(d, 'yyyy-MM-dd HH:mm:ss')
}

/**
 * 将 obj 变为 string ，根据 key 排序
 * 如把 {b:2, a:1, c:3} 变为 'a=1&b=2&c=3'
 * @param {object} obj 对象
 */
function getSortedObjStr(obj = {}) {
  if (_.isEmpty(obj)) return ''

  const keys = Object.keys(obj).sort() // 获取排序之后的 keys
  const arr = keys.map(key => {
    const val = obj[key]
    return `${key}=${val}`
  })
  return arr.join('&')
}

module.exports = {
  isWindows,
  parseNumberArr,
  formatDate,
  getSortedObjStr
}
